/**=========================================================
 * Service: simple-radio.js
 =========================================================*/

App.service('SimpleRadio', ['HttpUtils','Utils',
    function(httpUtils, utils) {
        'use strict';
        
        return {
            /**
             * 数据格式
             * name:名称
             * value:值
             */
            init: function($scope,options) {
                var defaultOptions = {
                    /**
                     * $scope对象中的属性名
                     */
                    optionModel: 'radioGroup',
                    /**
                     * 选中值实际绑定的变量名
                     * 如果绑定了自定义的变量 并且需要触发值变更事件时 需要指定
                     */
                    ngModel: '',
                    /**
                    /**
                     * 后台的查询参数
                     */
                    params: {},
                    /**
                     * 是否请求后台
                     */
                    remote: true,
                    /**
                     * 本地数据
                     * {name: 'name', value: 'value'}
                     */
                    datas: [],
                    /**
                     * 初始值
                     */
                    initValue: '',
                    /**
                     * 值变更事件
                     */
                    checkChangeEvent: null
                }
                
                var finalOptions = angular.extend(defaultOptions,options)
                
                if (utils.isEmpty($scope.radios)){
                    $scope.radios = {};
                }
                $scope.radios[finalOptions.optionModel] = {
                    currentCheck: '',
                    radioValues: []
                };
                
                //事件
                if (finalOptions.checkChangeEvent instanceof Function) {
                    var variable = utils.isEmpty(finalOptions.ngModel) ? 'radios.' + finalOptions.optionModel + ".currentCheck" : finalOptions.ngModel;
                    $scope.$watch(variable, 
                        function (newVal, oldVal) {
                            finalOptions.checkChangeEvent.call(this,newVal,oldVal);
                        }
                    );
                }
                
                //数据
                if (finalOptions.remote){
                    httpUtils.get(utils.getQueryListUrl(),finalOptions.params,
                        function (result) {
                            var datas = result.datas.gridDatas;
                            if (utils.isEmpty(finalOptions.initValue)){
                                $scope.radios[finalOptions.optionModel].currentCheck = datas[0].value;
                            }else{
                                $scope.radios[finalOptions.optionModel].currentCheck = finalOptions.initValue;
                            }
                            
                            for (var i = 0; i < datas.length; i++){
                                $scope.radios[finalOptions.optionModel].radioValues.push({name: datas[i].name, value: datas[i].value})
                            }
                        }
                    );
                }else{
                    $scope.radios[finalOptions.optionModel].radioValues = finalOptions.datas;
                
                    if (utils.isEmpty(finalOptions.initValue)){
                        $scope.radios[finalOptions.optionModel].currentCheck = finalOptions.datas[0].value;
                    }else{
                        $scope.radios[finalOptions.optionModel].currentCheck = finalOptions.initValue;
                    }
                }
                


                return {
                    scope: $scope,
                    options: finalOptions,
                    getCurrentCheck: function(){
                        var options = this.options;
                        var scope = this.scope;
                        return $scope.radios[finalOptions.optionModel].currentCheck;
                    }
                }
            }
        }
    }
]);